/* 
 * File:   main.cpp
 * Author: Angel
 *
 * Created on 22 de enero de 2013, 19:25
 */

#include <cstdlib>
#include <iostream>

using namespace std;

/*
 * 
 */

void leerlista(int lista[], int &tama){
    int i;
    cout<<"Introduce el numero de elementos de la lista:";
    cin>>tama;
    for(i=0;i<tama;i++){
        cout<<"Introduce el elemento "<<i<<" de la lista: ";
        cin>>lista[i];
    }
}

void merge(int lista1[], int tama1, int n, int lista2[], int tama2, int m, int lista3[], int &tama3){
    if(tama1==n){
        for(int i=tama3; i<tama1+tama2; i++){
            lista3[i]=lista2[m];
            m++;
            tama3++;
        }
    }else{
        if(tama2==m){
            for(int i=tama3; i<tama1+tama2; i++){
                lista3[i]=lista1[n];
                n++;
                tama3++;
            }
        }else{
            if(lista1[n]<lista2[m]){
                lista3[tama3]=lista1[n];
                tama3++;
                n++;
                merge(lista1,tama1,n,lista2,tama2,m,lista3, tama3);
            }else{
                lista3[tama3]=lista2[m];
                tama3++;
                m++;
                merge(lista1,tama1,n,lista2,tama2,m,lista3, tama3);
            }
        }
    }
}

void mostarlista(int lista[], int tama){
    cout<<"Lista = ";
    for (int i=0;i<tama; i++){
        cout<<lista[i]<<" ,";
    }
    cout<<endl;
}

int main(int argc, char** argv) {
    int lista1[100], lista2[100], lista3[200];
    int tama1, tama2, tama3=0;
    leerlista(lista1, tama1);
    leerlista(lista2, tama2);

    merge(lista1,tama1,0,lista2, tama2, 0, lista3, tama3);
    
    mostarlista(lista1, tama1);
    mostarlista(lista2, tama2);
    mostarlista(lista3, tama3);
    
    //esto es una prueba
    return 0;
}

